import { CSSProperties, VNodeChild } from 'vue';
import { createTypes, VueTypeValidableDef, VueTypesInterface } from 'vue-types';

// 定义 VueNode 类型，用于表示 VNodeChild 或 JSX.Element
export type VueNode = VNodeChild | JSX.Element;

// 定义 PropTypes 类型
type PropTypes = VueTypesInterface & {
  readonly style: VueTypeValidableDef<CSSProperties>; // style 属性类型为 CSSProperties
  readonly VNodeChild: VueTypeValidableDef<VueNode>; // VNodeChild 属性类型为 VueNode
};

// 创建 PropTypes 实例
const propTypes = createTypes({
  func: undefined,
  bool: undefined,
  string: undefined,
  number: undefined,
  object: undefined,
  integer: undefined,
}) as PropTypes;

// 扩展 PropTypes 实例
propTypes.extend([
  {
    name: 'style',
    getter: true,
    type: [String, Object],
    default: undefined,
  },
  {
    name: 'VNodeChild',
    getter: true,
    type: undefined,
  },
]);

export { propTypes };
